//
//  Problem1839.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/5/5.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1839. 所有元音按顺序排布的最长子字符串
 当一个字符串满足如下条件时，我们称它是 美丽的 ：

 所有 5 个英文元音字母（'a' ，'e' ，'i' ，'o' ，'u'）都必须 至少 出现一次。
 这些元音字母的顺序都必须按照 字典序 升序排布（也就是说所有的 'a' 都在 'e' 前面，所有的 'e' 都在 'i' 前面，以此类推）
 比方说，字符串 "aeiou" 和 "aaaaaaeiiiioou" 都是 美丽的 ，但是 "uaeio" ，"aeoiu" 和 "aaaeeeooo" 不是美丽的 。

 给你一个只包含英文元音字母的字符串 word ，请你返回 word 中 最长美丽子字符串的长度 。如果不存在这样的子字符串，请返回 0 。

 子字符串 是字符串中一个连续的字符序列。

 示例 1：
     输入：word = "aeiaaioaaaaeiiiiouuuooaauuaeiu"
     输出：13
     解释：最长子字符串是 "aaaaeiiiiouuu" ，长度为 13 。
 示例 2：
     输入：word = "aeeeiiiioooauuuaeiou"
     输出：5
     解释：最长子字符串是 "aeiou" ，长度为 5 。
 示例 3：
     输入：word = "a"
     输出：0
     解释：没有美丽子字符串，所以返回 0 。
  
 提示：
     1 <= word.length <= 5 * 105
     word 只包含字符 'a'，'e'，'i'，'o' 和 'u' 。
 */
@objcMembers class Problem1839: NSObject {
    func solution() {
        print(longestBeautifulSubstring("aeiaaioaaaaeiiiiouuuooaauuaeiu"))
        print(longestBeautifulSubstring("aeeeiiiioooauuuaeiou"))
        print(longestBeautifulSubstring("a"))
    }
    
    /*
     思路：
     1: 创建一个数字n = -10，遇到a时 = 1，其他+1
     2: 遇到a时，如果n=5，说明符合计算长度
     */
    func longestBeautifulSubstring(_ word: String) -> Int {
        var n = 0           // 记录元音字母的个数
        var len = 0         // 记录子字符串的长度
        var result = 0      //
        var last:Character = "0"
        for c in word {
            if c >= last {
                len += 1
                if c > last {
                    n += 1
                }
            } else {
                if len >= 5, n == 5 {
                    result = max(result, len)
                }
                len = 1
                n = 1
            }
            last = c
        }
        if len >= 5, n == 5 {
            result = max(result, len)
        }
        return result
    }
}
